Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

150
Views
La forma más apropiada de obtener esto: $($(".answer")[0])

Supongamos que quiero obtener el primer elemento entre todos los elementos de la clase ".respuesta"

 $($(".answer")[0])

Puedo hacer lo anterior, pero ¿cuál es el mejor equilibrio entre elegancia y velocidad?

*cambió la pregunta para reflejar la discusión actual

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

No puedo hablar del aspecto de la elegancia, pero el aspecto del rendimiento aquí puede marcar una gran diferencia.

A partir de un conjunto de pruebas de JavaScript , parece que su método original es en realidad el más eficiente y, contrariamente a la hipótesis de que la respuesta aceptada está vinculada, los selectores de Sizzle que no son CSS tienden a ser mucho menos eficientes que los selectores de métodos. Hay una razón para eso. El $('.answer') puede usar el getElementsByClass() nativo del navegador sin tener que recorrer manualmente los resultados. El :first selector complica eso. En este caso, el uso de los selectores de chisporroteo parece ralentizar la selección en un factor de entre 4 y 5.

Yo diría que, con jQuery, el rendimiento debería triunfar sobre la elegancia, y toda la evidencia (¡todos los navegadores que he probado hasta ahora!) parece indicar que la solución poco elegante de OP es la más rápida por una buena cantidad.

Estos son los resultados de los navegadores con más ejecuciones de prueba:

ingrese la descripción de la imagen aquí

(Los números son 'operaciones por segundo', por lo que los números más altos son más rápidos, los números más bajos son más lentos).

over 4 years ago · Santiago Trujillo Report

0

Los siguientes son todos equivalentes en funcionalidad (aunque no en velocidad):

  • var a0 = $($('.answer')[0]);
  • var a0 = $('.answer').first(); - ver http://api.jquery.com/first/
  • var a0 = $('.answer:first'); - ver http://api.jquery.com/first-selector/
  • var a0 = $('.answer').eq(0); - ver http://api.jquery.com/eq/
  • var a0 = $('.answer:eq(0)'); - ver http://api.jquery.com/eq-selector/

¿Cual es el mejor?
Se ha planteado la hipótesis de que las versiones del selector deberían ser más rápidas que las versiones del método (y la lógica tiene cierto sentido), pero aún no he encontrado un punto de referencia confiable para varios navegadores y documentos que demuestre que esto es cierto.

Y en algunos casos no puede usar el selector, ya que tiene un objeto jQuery resultante de resultados encadenados y luego debe reducirlo.

Editar : según la excelente información de las pruebas de @yc a continuación, a continuación se resumen los resultados de las pruebas actuales (4 de febrero de 2011) y se comparan con una línea de base de .answer:first :

          :primero :eq(0) .primero() .eq(0) $($('...')[0])
Chrome 8+ 100 % 92 % 224 % 266 % 367 %
   FF 3,6 100 % 100 % 277 % 270 % 309 %
  FF 4.0b 100 % 103 % 537 % 521 % 643 %
 Safari 5 100% 93% 349% 352% 467%
 Ópera 11 100% 103% 373% 374% 465%
     ES 8 100 % 101 % 1130 % 1246 % 1767 %
 iPhone 4 100% 95% 269% 316% 403%
================================================== ===
 Ponderado 100% 92% 286% 295% 405%
    Mayor 100% 95% 258% 280% 366%
  • La línea Ponderada muestra el rendimiento ponderado por el número de pruebas por navegador; los navegadores populares (entre los que se prueban) se cuentan con más fuerza.
  • La línea Principal muestra lo mismo, solo que incluye versiones no beta de los principales navegadores de escritorio.

En resumen: la hipótesis es (actualmente) incorrecta. Los métodos son significativamente más rápidos que los selectores de Sizzle y, casi sin excepción, el código del OP $($('.answer')[0]) es el más rápido de todos.

over 4 years ago · Santiago Trujillo Report

0

Use el :first selector o el .first método de filtro:

 $(".answer:first");

o:

 $(".answer").first();
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!